# -*- coding: utf-8 -*-

import sys	#Для работы с некоторыми объектами интерпретатора, например, для получения аргументов с командной строки 
import os	#Для работы с операционной системой, проверка наличия файлов и т.д. 
import glob	#Для работы с поиском файлов
import huawei	#Подключается самописный модуль генерирующий строки для cvs файла
import string	#Модуль для работы со строками
import datetime	#Модуль для работы со временем и датой. Использую для того чтобы выводить текущую дату
from datetime import timedelta
from ftplib import FTP
import psycopg2

def ShowHelp():
	print "huaweiparser filename convtype (bil2 to base)"

def DownloadFromFtp(fn):
	f = open("/var/www/bil/"+fn, "wb")
	try:
		ftp = FTP('192.168.20.140', 'ats2', 'qXwYf')
		ftp.retrbinary("RETR " + fn, f.write)
	except Exception,e:
		print e
		return 0
	else:
		f.close()
		ftp.quit()
		print "downloaded"
		return 1

def ParseBilFile(path_load, delimiter):	
	size_counter = 0	#Счётчик количества прочитанных байтов
	fstat = os.stat(path_load)	#Для получения размера файла
	print 'Parsing \"%s\". Size:%d bytes. Number of records:%d\n'%(path_load, fstat.st_size, fstat.st_size / 154)
	str = open(path_load,'rb')	#(Открыть файл, путь к файлу содержится в переменной "path_load", режим открытия: Чтение и Двоичный)
	try:
		conn = psycopg2.connect(host="192.168.20.16", database="chirkom_beta", user="pg_admin", password="[jxe100,jxtrgbdf")
		cur = conn.cursor()
	except:
		print "dbcon error"

	#checking = 'select count(*) from conversions where filename =\'' + fn + '\' and converted = \'1\''
	#cur.execute(checking)
	#res = cur.fetchall()
	#if res[0] < 1:
	#	print "file previously converted"
	#	cur.close()
	#	conn.close()
	#	return 'brrrr'
        stroka=str.read(154)	
	rezult = 'select * from _call_logs_huawei(\'' + fn + '\', \'{'
	while stroka:
		hexStr=''
		for x in xrange(0, len(stroka)):	#Enumaration of bytes (Перебор всех байтов)
			mess = ('%s'%hex(ord(stroka[x])))[2:]	#От символа отбирается его шестнадцатеричное значение и отбрасываются первые два символа пример: было "0x66", стало "66" / "0x66" -> "66"
			if len(mess) != 2:	#Если длина меньше 2-х, то дополняется слева одним нулём / If line length less then 2 then add zero ahead
				mess = '0%s'%mess
			hexStr = hexStr + (mess + ' ')	#Строка вида: 'c1 c1 86 d0 02 01 25 0c 12 0a 07 1a 02 01 1c ff 05 00 00 af 0a 00 00 8f 07 00 00 e0 0f 00 ff ff ff ff ff ff ff ff ff ff ff 00 71 22 44 0f ff ff ff ff ff ff 00 08 ff ff ff ff ff ff ff ff ff 00 08 ff ff ff ff ff ff ff ff ff 08 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 01 01 ff ff 00 00 ff ff 00 00 02 0b 88 09 bc 0d 10 00 13 ff 00 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 64 8f ff 90 00 00 00 03 02 00 00 d2 07 00 00 e1 f0 ff ff ff ff ff ff ' / String view: 'c1 c1 86 d0 02 01 25 0c 12 0a 07 1a 02 01 1c ff 05 00 00 af 0a 00 00 8f 07 00 00 e0 0f 00 ff ff ff ff ff ff ff ff ff ff ff 00 71 22 44 0f ff ff ff ff ff ff 00 08 ff ff ff ff ff ff ff ff ff 00 08 ff ff ff ff ff ff ff ff ff 08 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 01 01 ff ff 00 00 ff ff 00 00 02 0b 88 09 bc 0d 10 00 13 ff 00 00 01 00 01 00 00 00 01 00 00 00 00 00 00 00 64 8f ff 90 00 00 00 03 02 00 00 d2 07 00 00 e1 f0 ff ff ff ff ff ff '
			hexStr_out = string.split(hexStr, ' ')	#А здесь получается кортеж вида: ['c1', 'c1', '86', 'd0', '02', '01', '25', '0c', '12', '0a', '07', '1a', '02', '01', '1c', 'ff', '05', '00', '00', 'af', '0a', '00', '00', '8f', '07', '00', '00', 'e0', '0f', '00', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '71', '22', '44', '0f', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '01', '01', 'ff', 'ff', '00', '00', 'ff', 'ff', '00', '00', '02', '0b', '88', '09', 'bc', '0d', '10', '00', '13', 'ff', '00', '00', '01', '00', '01', '00', '00', '00', '01', '00', '00', '00', '00', '00', '00', '00', '64', '8f', 'ff', '90', '00', '00', '00', '03', '02', '00', '00', 'd2', '07', '00', '00', 'e1', 'f0', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', ''] / Converting to tuple view:['c1', 'c1', '86', 'd0', '02', '01', '25', '0c', '12', '0a', '07', '1a', '02', '01', '1c', 'ff', '05', '00', '00', 'af', '0a', '00', '00', '8f', '07', '00', '00', 'e0', '0f', '00', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '71', '22', '44', '0f', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '00', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '08', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '01', '01', 'ff', 'ff', '00', '00', 'ff', 'ff', '00', '00', '02', '0b', '88', '09', 'bc', '0d', '10', '00', '13', 'ff', '00', '00', '01', '00', '01', '00', '00', '00', '01', '00', '00', '00', '00', '00', '00', '00', '64', '8f', 'ff', '90', '00', '00', '00', '03', '02', '00', '00', 'd2', '07', '00', '00', 'e1', 'f0', 'ff', 'ff', 'ff', 'ff', 'ff', 'ff', '']
		if delimiter == 'bil2':
                        rezult = rezult + huawei.conv_bil2(hexStr_out)
                        #print rezult
		size_counter = size_counter + 154	#С каждой обработкой очередных 154 байтов увеличиваем на 154 счётчик обработанных байтов
		stroka = str.read(154)
	rezult = rezult[0:len(rezult)-2]
	rezult = rezult + '}\'::character varying[])'
	logfile = open('rmrm.tmp', 'a')
	logfile.write(rezult)
	logfile.close()
	#print rezult
	cur.execute(rezult)
	conn.commit()
	cur.close()
	conn.close()
	print 'file \n' + path_load + ' deleted'
	os.remove(path_load)


















now = datetime.datetime.now()
begin_time = now - timedelta(0,0,0,0,0,3)
filn = '%04i%02i%02i%02i.BIL'%(begin_time.year,begin_time.month,begin_time.day,begin_time.hour)
fn = filn
if len(sys.argv) == 2:	
	#selquery = 'select filename from conversions where converted = '0'';
	try:
		conn = psycopg2.connect(host="192.168.20.16", database="chirkom_beta", user="pg_admin", password="[jxe100,jxtrgbdf")
		cur = conn.cursor()
	except:
		print "dbcon error"
		sys.exit
	sel = 'select filename from conversions where converted = \'0\' and substring(filename from 1 for 1)!=\'U\''
	cur.execute(sel)
	rows = cur.fetchall()
	for row in rows:
		print 'exists not converted files'
		fn = row[0]
		print 'downnloading'
		if DownloadFromFtp(fn)==1:
			print fn
			if sys.argv[1] == 'bil2':
                		ParseBilFile("/var/www/bil/"+fn, 'bil2')
			else:
				ShowHelp()
	fn = filn
	selquery = 'insert into conversions (filename, converted) values (\'' + fn + '\', 0)';
	cur.execute(selquery)
	conn.commit()
	cur.close()
	conn.close()

	if DownloadFromFtp(fn)==1:
		print fn
		if sys.argv[1] == 'bil2':
                	ParseBilFile("/var/www/bil/"+fn, 'bil2')
		else:
			ShowHelp()
	else:
		ShowHelp()
	
print 'Затрачено времени/Spent time: ' + str((datetime.datetime.now() - begin_time))
